package main.leetcode.clockin.Auguest;

/**
 * 415. 字符串相加
 *
 * <p>给定两个字符串形式的非负整数 num1 和num2 ，计算它们的和。
 *
 * <p>提示：num1 和num2 的长度都小于 5100 num1 和num2 都只包含数字 0-9 num1 和num2 都不包含任何前导零 你不能使用任何內建 BigInteger 库，
 * 也不能直接将输入的字符串转换为整数形式
 */
public class day3 {
    public static void main(String[] args) {
        System.out.println(new day3().addStrings("9", "99"));
    }

    // 错误
    //    public String addStrings(String num1, String num2) {
    //        int i = num1.length() - 1;
    //        long res = 0;
    //        int cnt = 1;
    //        while (i >= 0) {
    //            res += cnt * (num1.charAt(i--) - '0');
    //            cnt *= 10;
    //        }
    //        i = num2.length() - 1;
    //        cnt = 1;
    //        while (i >= 0) {
    //            res += cnt * (num2.charAt(i--) - '0');
    //            cnt *= 10;
    //        }
    //        return Long.toString(res);
    //    }

    public String addStrings(String num1, String num2) {
        int i = num1.length() - 1;
        int j = num2.length() - 1;
        int last = 0;
        StringBuilder res = new StringBuilder();
        while (i >= 0 || j >= 0) {
            int a = i >= 0 ? num1.charAt(i) - '0' : 0;
            int b = j >= 0 ? num2.charAt(j) - '0' : 0;
            int tmp = a + b + last;
            res.append(tmp % 10);
            last = tmp / 10;
            --i;
            --j;
        }
        if (last > 0) {
            res.append(last);
        }
        return res.reverse().toString();
    }
}
